package backtype.storm.security.auth.authorizer;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import backtype.storm.Config;
import backtype.storm.security.auth.IAuthorizer;
import backtype.storm.security.auth.ReqContext;


/**
 * A no-op authorization implementation that illustrate info available for
 * authorization decisions.
 */
public class NoopAuthorizer implements IAuthorizer {
    private static final Logger LOG = LoggerFactory.getLogger(NoopAuthorizer.class);


    /**
     * Invoked once immediately after construction
     * 
     * @param conf
     *            Storm configuration
     */
    public void prepare(Map conf) {
    }


    /**
     * permit() method is invoked for each incoming Thrift request
     * 
     * @param context
     *            request context includes info about
     * @param operation
     *            operation name
     * @param topology_storm
     *            configuration of targeted topology
     * @return true if the request is authorized, false if reject
     */
    public boolean permit(ReqContext context, String operation, Map topology_conf) {
        LOG.info("[req " + context.requestID() + "] Access " + " from: "
                + (context.remoteAddress() == null ? "null" : context.remoteAddress().toString())
                + " principal:" + (context.principal() == null ? "null" : context.principal()) + " op:"
                + operation + " topoology:" + topology_conf.get(Config.TOPOLOGY_NAME));
        return true;
    }
}
